<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
   targetNamespace="http://www.opengis.net/fes/2.0"
   xmlns:fes="http://www.opengis.net/fes/2.0"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   elementFormDefault="qualified"
   version="2.0.0">

   <xsd:annotation>
      <xsd:documentation>
         Filter Encoding is an OGC Standard.
         Copyright (c) 2010 Open Geospatial Consortium, Inc. All Rights Reserved.
         To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ .
      </xsd:documentation>
   </xsd:annotation>
   
   <xsd:element name="AbstractQueryExpression"
                type="fes:AbstractQueryExpressionType" abstract="true"/>
   <xsd:complexType name="AbstractQueryExpressionType" abstract="true">
      <xsd:attribute name="handle" type="xsd:string"/>
   </xsd:complexType>

   <xsd:element name="AbstractAdhocQueryExpression"
                type="fes:AbstractAdhocQueryExpressionType"
                substitutionGroup="fes:AbstractQueryExpression"
                abstract="true"/>
   <xsd:complexType name="AbstractAdhocQueryExpressionType" abstract="true">
      <xsd:complexContent>
         <xsd:extension base="fes:AbstractQueryExpressionType">
            <xsd:sequence>
               <xsd:element ref="fes:AbstractProjectionClause"
                            minOccurs="0" maxOccurs="unbounded"/>
               <xsd:element ref="fes:AbstractSelectionClause" minOccurs="0"/>
               <xsd:element ref="fes:AbstractSortingClause" minOccurs="0"/>
            </xsd:sequence>
            <xsd:attribute name="typeNames"
                           type="fes:TypeNamesListType" use="required"/>
            <xsd:attribute name="aliases"
                           type="fes:AliasesType"/>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>

   <xsd:simpleType name="TypeNamesListType">
       <xsd:list itemType="fes:TypeNamesType"/>
   </xsd:simpleType>
   <xsd:simpleType name="TypeNamesType">
       <xsd:union memberTypes="fes:SchemaElement xsd:QName"/>
   </xsd:simpleType>
   <xsd:simpleType name="SchemaElement">
      <xsd:restriction base="xsd:string">
         <xsd:pattern value="schema\-element\(.+\)"/>
      </xsd:restriction>
   </xsd:simpleType>
   <xsd:simpleType name="AliasesType">
      <xsd:list itemType="xsd:NCName"/>
   </xsd:simpleType>

   <xsd:element name="AbstractProjectionClause" abstract="true"/>
   <xsd:complexType name="AbstractProjectionClauseType" abstract="true"/>

   <xsd:element name="AbstractSelectionClause" abstract="true"/>
   <xsd:complexType name="AbstractSelectionClauseType" abstract="true"/>

   <xsd:element name="AbstractSortingClause" abstract="true"/>
   <xsd:complexType name="AbstractSortingClauseType" abstract="true"/>

</xsd:schema>
